"""
数据库配置与会话管理

提供数据库连接、会话管理等功能
"""

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# ========== 数据库配置 ==========

# 数据库 URL
# 开发环境：使用 SQLite（无需安装数据库）
#DATABASE_URL = "sqlite:///./chapter01.db"

# 生产环境：使用 PostgreSQL
DATABASE_URL = "postgresql://postgres:123456@localhost:5432/fastapi_advanced"

# 创建数据库引擎
engine = create_engine(
    DATABASE_URL,
    echo=True,  # 打印 SQL 语句（开发时有用）
    connect_args={"check_same_thread": False} if DATABASE_URL.startswith("sqlite") else {},
)

# 创建会话工厂
SessionLocal = sessionmaker(
    autocommit=False,  # 不自动提交
    autoflush=False,   # 不自动刷新
    bind=engine,       # 绑定引擎
)

# 创建基类（所有模型都继承它）
Base = declarative_base()


# ========== 依赖注入：获取数据库会话 ==========

def get_db():
    """
    获取数据库会话
    
    使用方法：
    ```python
    @app.get("/items")
    def get_items(db: Session = Depends(get_db)):
        items = db.query(Item).all()
        return items
    ```
    
    Yields:
        Session: 数据库会话
    """
    db = SessionLocal()
    try:
        yield db  # 返回会话
    finally:
        db.close()  # 请求结束后关闭

